define(function(require) {
	
	var $ = require("jquery");
	var _ = require("underscore");
	var Backbone = require("backbone");
	var Parse = require("parse");

	var UserModel = Backbone.Model.extend({

		constructorName: "UserModel",
	
	    queryLoginIoRegalo: function(){

	        var user = new Parse.User();
	        user.set("username", document.formIoRegalo.username.value);
	        user.set("password", document.formIoRegalo.password.value);
  
	        var self = this;

	        //salvo il valore di user altrimenti viene sovrascritto
	        var utente = user;
	        
	        Parse.User.logIn(user.get("username"), user.get("password"), {

	            success: function(user) {
	            	//l'utente esiste,non và registrato
	                self.setLocalStorage(utente);
					self.trigger("loggato");
	            },
	            error: function(user, error){

	            	console.log(error);
	                self.trigger("erroreLogin");

	            }
	        });
	      
	      

   		},

   		setLocalStorage: function(user){
        
	        //resetto il localStorage creato da facebook
	        localStorage.clear();
	     
	        // inserisco i dati nel localStorage
	        localStorage.setItem('nome', user.get('nome'));
	        localStorage.setItem('cognome', user.get('cognome'));
	        localStorage.setItem('username', user.get('username'));
	        localStorage.setItem('email', user.get('email'));
	        localStorage.setItem('urlImgSmall', user.get('imgProfiloSmall'));
	        localStorage.setItem('urlImgLarge', user.get('imgProfiloLarge'));
	        localStorage.setItem('login','true');

	    },

	    registration: function(user){
        
	        var self = this;

	        user.signUp(null, {
	            success: function(user) {

	                self.setLocalStorage(user);
	                self.trigger("registrato");

	            },
	            error: function(user, error) {
	             	// Show the error message somewhere and let the user try again.
	            	self.trigger("erroreUser", error);
	            	
	            }
	        });
	    
	    },


		fbLogin: function() {

			var self = this;

			openFB.init('445088995593662'); // Defaults to sessionStorage for storing the Facebook token
		      
		    openFB.login('email', function() {
		            
		        openFB.api({ path: '/me',
		                  
			    	success: function(data) {
			          
						//creo l'utente
						var user = new Parse.User();
						user.set("username", data.name);
						user.set("password", 'facebook');
						user.set("email", data.email);
						user.set("nome", data.first_name);
						user.set("cognome", data.last_name);
						user.set("imgProfiloSmall", 'http://graph.facebook.com/' + data.id + '/picture?type=small');
						user.set("imgProfiloLarge", 'http://graph.facebook.com/' + data.id + '/picture?type=large');

						self.loginParse(user,true);

				    },
				    error: function(error) {

				    	self.trigger("erroreUser", error);
			          
				        alert('Facebook getInfo failed: ' + error.error_description);                

            	  	}
		        });

		    },
		        
		    function(error) {

		        alert('Facebook login failed: ' + error.error_description);
		        
		    });

		},	


		loginParse: function(user,facebook){

	        var self = this;
	        //salvo il valore di user altrimenti viene sovrascritto
	        var utente = user;
	        
	        Parse.User.logIn(user.get("username"), user.get("password"), {

	            success: function(user) {
	                //l'utente esiste,non và registrato
	                self.setLocalStorage(utente);
	                self.trigger("registrato");

	            },
	            error: function(user, error){
	                // se provengo da facebook registro l'utente altrimenti se provengo da ioRegalo faccio 
	                // ricomparire la form con gli errori
	                if(facebook){
	                     //se l'utente non è registrato lo registro
	                    self.registration(utente);
	                } else {
	                    
	                    self.trigger("showMessage");

	                }               

	            }
	        });

	    },


	    recuperaDati: function(){

	        var self = this;
	        var email = document.formIoRegalo.email.value;
	        var User = Parse.Object.extend("User");
	        var query = new Parse.Query(User);
	        query.equalTo("email", email);

	        query.find({
	            success: function(results) {

	                if(results.length == 1){
	                    //se l'email è presente sul db mando una email con il recupero password
	                    self.inviaEmail(email);

	                } else {

	                	self.trigger("errorRecupero");
	                                        
	                }

	            },
	            error: function(error) {

	               self.trigger("errorQuery");
	          
	            }
	        });
	            
	    },
	    
	    inviaEmail: function(email){

	        var self = this;
	        //eseguo la query che mi prende i la password dell'email richiesta
	        var query = new Parse.Query("User");
	        query.equalTo("email", email);
	        query.find({
	            success: function(results) {
	                var passwd = results[0].get('passwd');
	                var oggetto = "ioRegalo info recupero password"; 
	                var messaggio = "La password da lei richiesta per l'accesso all'app ioRegalo è: " + passwd; 
	                
	                // invio con jquery la mail di recupero
	                $.ajax({
	                    type: "POST",
	                    url: "https://mandrillapp.com/api/1.0/messages/send.json",
	                    data: {
	                        "key": "VUwg1nd-9ECp2iIqe1RG8w",
	                        "message": {
	                            "from_email": "info@ioRegalo.com",
	                            "to": [
	                                {
	                                    "email": "greedydevil@katamail.com",
	                                    "name": "nome",
	                                    "type": "to"
	                                }
	                            ],
	                        "autotext": "true",
	                        "subject": "this.oggetto",
	                        "html": "this.messaggio"
	                        }
	                    }
	                }).done(function(response) {
	                                        
	                    // se è un successo nel code passo 1 cosi carico l'immagine di successo,altrimenti 0 per quella d'errore
	                    self.trigger("successRecupero");

	                });

	            },
	            error: function(error) {

	                self.hideSpinner();

	                var message = "▼ Query fallita!";
	                var classe = "alert-danger";

	                var context = {
	                    message: message,
	                    class: classe
	                }; 

	                $(self.el).html(self.template(context));
	                
	            }
	        });

	    },



	});

 return UserModel;
});